# -*- encoding:utf-8 -*-
# @time:2022-11-18 13:53
# @Author : serein
# @Email: serein@qq.com
# @File:serializers.py
# @Software: PyCharm
from django.contrib.auth.models import User
from rest_framework.fields import SerializerMethodField
# 序列化器定义方法自定义返回数据字段的数据格式
#使用方法：def get_字段名（self,model_object）
from rest_framework import serializers
from .models import Classes
from users.serializers import UserSerializer

class  Classesserializers(serializers.ModelSerializer):
    memberDetail = SerializerMethodField()
    #使用序列化返回数据的时候，大多都只返回一个表的数据
    #如果向返回关联表的数据就需要serializermethodfield方法了
    #此处使用了这个方法就可以返回出users表的数据
    class Meta:
        model = Classes
        exclude = ['is_delete']
    def get_memberDetail(self,instance):
        #要进行一个分类操作
        # 因为用户里面有老师有学生，我们并不是展示用户表里面的所有数据
        #所以要先对用户表的数据先进行一个序列化操作再筛选（在uses里面去操作）
        members = UserSerializer(instance.member.all(),many=True).data#获取当前班级所有的用户数据
        return {
            'teacher':[i['username'] for i in members if i['is_superuser'] or 1 in i['groups']],
            'student':[i['username'] for i in members if 2 in i['groups']]#[user和group是多对多连接的，groups应该是多对多中的中间键，可以直接查询]
        }

#任务是给学生添加班级
#此任务需要判断这个班级是否存在，这个学生是否是新学员，设置随机生成密码，邮件发给学生
#首先这里只有一个班级的序列化器，会展示所有的班级，这并不是我们想要的
#所以需要新建一个序列化器
class CreateuserSerializers(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username','first_name','email']
        extra_kwargs = {
            'username' : {'required' : True},
            'email' : {'required' : True},#是表示反序列化时，必须输入默认是True
        }